;:sys36864
	;.opt oo
	*= 50000
vic	=$d000
strout	=$ab1e
nmivec	=$318
nmiposs	=$dd0d
rs232nmi	=$fe72
endnmi	=$febc
qscan	=$ff9f
konf	=1
numbkey	=198
milli	=$eeb3
tmp	=166
clrchn	=$ffcc
fa	=125
close	=$ffc3
keybuf	=630
grafik	=$a000
latch	=$d000
bs	=$8400
tmp2	=tmp+2
bank	=$dd00
getkey	=$f142
shift	=$28d
farbram	=$d800
rept	=650
tmp3	=247
tmp4	=249
chkout	=65481
open	=65472
qciout	=$ffa8
buf	=690
chrgot	=121
getkx	=$b7f1
	jmp setup
hallo	.byt 13
	.byte "/ uniprint 24 wire v2.0 10.91"
	.byt 13
	.byte "/ nikolaus heusler"
	.byt 13
	.byte "/ zwengauerweg 18"
	.byt 13
	.byte "/ 8000 muenchen 71"
	.byt 13,0
nmiflag	brk
stackptr	brk
colmerk	brk
konfmerk	brk
keymerk	brk
tmpmerk	.word 0
tmp2merk	.word 0
counter	brk
repmerk	brk
bmerk	brk
font	brk
screen	brk
backgn	brk
expx	brk
expy	brk
snum	brk
x1	.word 0
yy	brk
xx	.word 0
hiba	brk
tmp3merk	.word 0
tmp4merk	.word 0
si	brk
sm	brk
sa	brk
x	.word 0
y	brk
data	brk
offx	brk
offy	.word 0
line	brk
colm	brk
c1	.byt 1
c4	.byt 4
rand	brk
plte	brk
xxb	.word 0
yyb	brk
stop	brk
grbit	.byt 128,64,32,16,8,4,2,1
gbit	.byt 1,2,4,8,16,32,64,128
mult	.word $a000,$a140,$a280,$a3c0
	.word $a500,$a640,$a780,$a8c0
	.word $aa00,$ab40,$ac80,$adc0
	.word $af00,$b040,$b180,$b2c0
	.word $b400,$b540,$b680,$b7c0
	.word $b900,$ba40,$bb80,$bcc0
	.word $be00
acht	.byt 0,13,26
pri1	.byt 13,24,$33,27,13,64,27
setup	lda #<neunmi
	ldy #>neunmi
	sta nmivec
	sty nmivec+1
	lda #0
	sta nmiflag
	sta plte
	jsr chrgot
	beq frei
	jsr getkx
	stx c1
	jsr chrgot
	beq frei
	jsr getkx
	stx c4
frei	lda #<hallo
	ldy #>hallo
	jmp strout
pause	jsr milli
	dex
	bne pause
	rts
scan	jsr qscan
	sei
	jsr getkey
	sei
	rts
rueck	rts
copy4	ldy #4
copy	sta tmp+1
	stx tmp2+1
	tya
	tax
	ldy #0
	sty tmp
	sty tmp2
	php
	sei
	lda konf
	pha
	lda #48
	sta konf
cop	lda (tmp),y
	sta (tmp2),y
	dey
	bne cop
	inc tmp+1
	inc tmp2+1
	dex
	bne cop
	pla
	sta konf
	plp
	rts
savetmp	lda tmp
	ldy tmp+1
	sta tmpmerk
	sty tmpmerk+1
	lda tmp2
	ldy tmp2+1
	sta tmp2merk
	sty tmp2merk+1
	lda tmp3
	ldy tmp3+1
	sta tmp3merk
	sty tmp3merk+1
	lda tmp4
	ldy tmp4+1
	sta tmp4merk
	sty tmp4merk+1
	rts
loadtmp	lda tmpmerk
	ldy tmpmerk+1
	sta tmp
	sty tmp+1
	lda tmp2merk
	ldy tmp2merk+1
	sta tmp2
	sty tmp2+1
	lda tmp3merk
	ldy tmp3merk+1
	sta tmp3
	sty tmp3+1
	lda tmp4merk
	ldy tmp4merk+1
	sta tmp4
	sty tmp4+1
	rts
getform	jsr scan
	cmp #"\x03"
	bne nos
	pla
	pla
endfk	dec vic+32
	jmp master
nos	cmp #"1"
	bcc getform
	cmp #"4"
	bcs getform
	sec
	sbc #"1"
	tax
	lda acht,x
	sta rand
	rts
ciout	jsr qciout
	sei
	rts
neunmi	sei
	pha
	txa
	pha
	tya
	pha
	lda nmiflag
	beq cango
	jmp endnmi
cango	inc nmiflag
	tsx
	stx stackptr
	lda #$7f
	sta nmiposs
	lda nmiposs
	bpl nors232
	jmp rs232nmi
nors232	lda konf
	sta konfmerk
	lda #55
	sta konf
	lda vic+33
	and #$f
	sta backgn
	lda rept
	sta repmerk
	lda #64
	sta rept
	lda numbkey
	sta keymerk
	ldx #15
	jsr pause
	jsr savetmp
	ldx vic+32
	stx colmerk
	lda shift
	bne start
	ldy #0
	sty tmp
	lda #>grafik
	sta tmp+1
	tya
	ldx #32
clear	sta (tmp),y
	dey
	bne clear
	inc tmp+1
	dex
	bne clear
start	inc vic+32
	lda bank
	and #3
	eor #3
	asl
	asl
	asl
	asl
	asl
	asl
	sta hiba
master	jsr scan
	beq master
	cmp #3
	bne nostop
	lda colmerk
	sta vic+32
	lda keymerk
	sta numbkey
	lda #0
	sta nmiflag
	lda repmerk
	sta rept
	jsr loadtmp
	lda konfmerk
	sta konf
	ldx stackptr
	txs
	jmp endnmi
nostop	cmp #136
	bne nof7
	lda #>bs
	ldx #>latch
	jsr copy4
	ldx #4
	lda #>bs
	sta tmp+1
	lda #1
clin	sta (tmp),y
	iny
	bne clin
	inc tmp+1
	dex
	bne clin
	lda bank
	pha
	lda vic+17
	pha
	lda vic+24
	pha
	lda vic+22
	pha
	lda vic+21
	pha
	lda #0
	sta vic+21
	lda #1
	sta bank
	lda #59
	sta vic+17
	lda #29
	sta vic+24
	lda #200
	sta vic+22
gky	jsr scan
	beq gky
	pla
	sta vic+21
	pla
	sta vic+22
	pla
	sta vic+24
	pla
	sta vic+17
	pla
	sta bank
	lda #>latch
	ldx #>bs
	jsr copy4
	jmp master
nof7	cmp #135
	bne nof5
	inc vic+32
	php
	sei
	lda konf
	pha
	lda #48
	sta konf
	ldy #0
	sty tmp
	lda #>grafik
	sta tmp+1
	ldx #32
inv	lda (tmp),y
	eor #-1
	sta (tmp),y
	iny
	bne inv
	inc tmp+1
	dex
	bne inv
	pla
	sta konf
	plp
	jmp endfk
nof5	cmp #139
	bne nof6
	ldx #32
	ldy #0
	sty tmp
	lda #>grafik
	sta tmp+1
	inc vic+32
	lda #8
	sta counter
	php
	sei
	lda konf
	pha
	lda #48
	sta konf
grid	lda (tmp),y
	eor #1
	sta (tmp),y
	dec counter
	bne noc
	lda #8
	sta counter
	lda (tmp),y
	eor #-2
	sta (tmp),y
noc	iny
	bne grid
	inc tmp+1
	dex
	bne grid
	pla
	sta konf
	plp
	dec vic+32
nof6	cmp #133
	beq jaf1
	jmp nof1
jaf1	inc vic+32
	lda vic+17
	and #32
	bne graphik
	jmp text
graphik	lda vic+24
	and #8
	asl
	asl
	ora hiba
	ldx #>grafik
	ldy #32
	jsr copy
eot	jmp endfk
text	lda bank
	and #3
	eor #3
	sta bmerk
	lda vic+24
	and #14
	asl
	asl
	ldx #48
	cmp #$10
	beq sonder
	cmp #$18
	bne usual
sonder	ldy bmerk
	cpy #1
	beq usual
	cpy #3
	beq usual
	ldx #51
	clc
	adc #$c0
	bne goon
usual	ora hiba
goon	sta font
	lda vic+24
	and #$f0
	lsr
	lsr
	ora hiba
	sta screen
	php
	sei
	lda konf
	pha
	stx konf
	lda #4
	sta counter
	lda #0
	sta tmp3
	sta tmp
	lda screen
	sta tmp3+1
	lda #>grafik
	sta tmp+1
loop0	lda #0
	sta tmp2
	lda font
	sta tmp2+1
	jsr allwtest
	beq nix
	lda (tmp3),y
	tax
	beq loop1
loop2	lda tmp2
	clc
	adc #8
	sta tmp2
	bcc loop4
	inc tmp2+1
loop4	dex
	bne loop2
loop1	ldy #7
loop5	lda (tmp2),y
	sta (tmp),y
	dey
	bpl loop5
nix	lda tmp
	clc
	adc #8
	sta tmp
	bcc loop7
	inc tmp+1
loop7	inc tmp3
	bne loop0
	inc tmp3+1
	dec counter
	bne loop0
	pla
	sta konf
	plp
	jmp eot
allwtest	lda tmp3
	sta tmp4
	lda tmp3+1
	and #3
	ora #>farbram
	sta tmp4+1
	ldy #0
	ldx konf
	lda #55
	sta konf
	lda (tmp4),y
	and #$f
	stx konf
	cmp backgn
	rts
nof1	cmp #134
	beq jaf3
	jmp nof3
jaf3	lda #7
	sta snum
	inc vic+32
sp0	lda vic+21
	ldx snum
	and gbit,x
	bne sp1
	jmp sp2
tobi	jmp sp2
sp1	lda vic+39,x
	and #$f
	cmp backgn
	beq tobi
	lda vic+23
	and gbit,x
	sta expy
	lda vic+29
	and gbit,x
	sta expx
	lda vic+16
	and gbit,x
	beq t
	lda #1
t	pha
	txa
	asl
	tax
	lda vic,x
	sec
	sbc #24
	sta x1
	pla
	sbc #0
	sta x1+1
	lda vic+1,x
	sec
	sbc #50
	sta yy
	lda vic+24
	and #$f0
	lsr
	lsr
	ora hiba
	clc
	adc #3
	sta tmp4+1
	lda #$f8
	sta tmp4
	ldy snum
	lda (tmp4),y
	ldx #6
	sta tmp3
	lda #0
	sta tmp3+1
mal64	asl tmp3
	rol tmp3+1
	dex
	bne mal64
	lda tmp3+1
	ora hiba
	sta tmp3+1
	lda #0
	sta si
sp3	lda #0
	sta sm
	lda x1
	sta xx
	lda x1+1
	sta xx+1
sp4	php
	sei
	lda konf
	pha
	lda #48
	sta konf
	ldy #0
	lda (tmp3),y
	sta data
	pla
	sta konf
	plp
	lda #7
	sta sa
sp5	lda data
	ldx sa
	and gbit,x
	beq sp6
	jsr qplot
sp6	inc xx
	bne sp6a
	inc xx+1
sp6a	lda expx
	beq sp6aa
	inc xx
	bne sp6aa
	inc xx+1
sp6aa	dec sa
	bpl sp5
	inc tmp3
	bne sp7
	inc tmp3+1
sp7	inc sm
	lda sm
	cmp #3
	bcc sp4
	inc yy
	lda expy
	beq sp7a
	inc yy
sp7a	inc si
	lda si
	cmp #21
	bcc sp3
sp2	dec snum
	bmi eos
	jmp sp0
eos	jmp endfk
test	dec plte
plot	ldx yy
	cpx #200
	bcs ngut
	lda xx+1
	cmp #1
	bcc okay
	beq test2
ngut	lda #0
	sta plte
	rts
test2	lda xx
	cmp #64
	bcs ngut
okay	txa
	lsr
	lsr
	lsr
	asl
	tay
	lda mult+1,y
	sta tmp+1
	txa
	and #7
	clc
	adc mult,y
	sta tmp
	lda xx
	and #$f8
	adc tmp
	sta tmp
	lda tmp+1
	adc xx+1
	sta tmp+1
	php
	sei
	lda konf
	pha
	lda #48
	sta konf
	lda xx
	and #7
	tax
	lda grbit,x
	ldy plte
	bne tst
	ldy #0
	ora (tmp),y
	sta (tmp),y
	pla
	sta konf
	plp
	rts
tst	ldy #0
	sty plte
	and (tmp),y
	tay
	pla
	sta konf
	plp
	tya
	rts
qqplot	jsr plot
	lda expx
	beq noex
	inc xx
	bne v2
	inc xx+1
v2	jsr plot
	lda xx
	bne v2a
	dec xx+1
v2a	dec xx
noex	rts
qplot	jsr qqplot
	lda expy
	beq noex
	inc yy
	jsr qqplot
	dec yy
	rts
nof3	cmp #140
	beq print
	jmp nof8
print	inc vic+32
	jsr getform
	sei
	lda #fa
	ldx c4
	ldy c1
	jsr $ffba
	lda #0
	jsr $ffbd
	jsr open
	ldx #fa
	jsr chkout
	ldx #6
p1out	lda pri1,x
	jsr ciout
	dex
	bpl p1out
	ldy #0
	sty tmp
	lda #>grafik
	sta tmp+1
	lda #25
	sta line
zeile	jsr scan
	cmp #3
	bne weiter
	jmp endlin
weiter	lda #32
	ldx rand
	beq nora
marg	jsr ciout
	dex
	bne marg
nora	jsr esc
	lda #"*"
	jsr ciout
	lda #$27
	jsr ciout
	lda #<960
	jsr ciout
	lda #>960
	jsr ciout
	lda #40
	sta colm
spalte	lda konf
	pha
	sei
	lda #54
	sta konf
	ldy #0
robyte	ldx #0
	lda (tmp),y
robit	asl
	rol buf,x
	inx
	cpx #8
	bne robit
	iny
	cpy #8
	bne robyte
	pla
	sta konf
	ldx #7
nadel24	ldy #7
nadel25	lda buf,x
	asl
	rol buf+8,x
	rol buf+16,x
	rol buf+24,x
	lda buf,x
	asl
	rol buf+8,x
	rol buf+16,x
	rol buf+24,x
	lda buf,x
	asl
	rol buf+8,x
	rol buf+16,x
	rol buf+24,x
	sta buf,x
	dey
	bpl nadel25
	dex
	bpl nadel24
	ldx #0
ausgabe	lda buf+24,x
	jsr ciout
	lda buf+16,x
	jsr ciout
	lda buf+8,x
	jsr ciout
	lda buf+24,x
	jsr ciout
	lda buf+16,x
	jsr ciout
	lda buf+8,x
	jsr ciout
	lda buf+24,x
	jsr ciout
	lda buf+16,x
	jsr ciout
	lda buf+8,x
	jsr ciout
	inx
	cpx #8
	bne ausgabe
	clc
	lda tmp
	adc #8
	sta tmp
	bcc noinc
	inc tmp+1
noinc	dec colm
	beq endcol
	jmp spalte
endcol	lda #13
	jsr ciout
	dec line
	beq endlin
	jmp zeile
endlin	jsr esc
	lda #64
	jsr ciout
	lda #13
	jsr ciout
	jsr clrchn
	lda #fa
	jsr close
	cli
	jmp endfk
esc	lda #27
	jmp ciout
nof8	cmp #138
	beq frame
	jmp master
frame	inc vic+32
	lda #200
	sta yy
yfr	dec yy
	lda #0
	sta xx
	sta xx+1
	jsr pla3
	inc xx+1
	lda #63
	sta xx
	jsr pla4
	lda yy
	bne yfr
	dec xx+1
	lda #0
	sta xx
xfr	lda #0
	sta yy
	jsr pla1
	lda #199
	sta yy
	jsr pla2
	inc xx
	bne xxf
	inc xx+1
xxf	lda xx+1
	beq xfr
	lda xx
	cmp #64
	bcc xfr
	jmp endfk
pla1	inc yy
	jsr test
	dec yy
	jsr dia
	bne schluss
rein	jmp plot
pla2	dec yy
	jsr test
	inc yy
	jsr dia
	beq rein
	rts
pla3	inc xx
	jsr test
	dec xx
	jsr dia
	beq rein
	rts
pla4	dec xx
	jsr test
	inc xx
	jsr dia
	beq rein
	rts
dia	and #-1
	beq naja
schluss	rts
naja	sta stop
	dec yy
	jsr testx
	inc yy
	inc yy
	jsr testx
	dec yy
	lda stop
	rts
testx	inc xx
	bne rt1
	inc xx+1
rt1	jsr test
	ora stop
	sta stop
	sec
	lda xx
	sbc #2
	sta xx
	lda xx+1
	sbc #0
	sta xx+1
	jsr test
	ora stop
	sta stop
	inc xx
	bne schluss
	inc xx+1
	rts
